NeXT TypedStream Data | 1992-12-20 | 118KB | 817 lines
typedstream
StreamTable
HashTable
Object
[20c]
typedstream
[4228c]
typedstream
HashTable
Object
EditController
HeaderClass
%%%%i@@
genericobject_nib
ViewStart
TheFileController
ViewEnd
SelectionStart
ViewSecondsEnd
ZoomSlider
MuLawButton
MonoButton
SelectionSecondsStart
StereoButton
ZoomField
SelectionLength
ViewSecondsLength
ZoomButton
SelectionEnd
SelectionSecondsEnd
ViewLength
ViewSecondsStart
FortyButton
TwentyButton
SelectionSecondsLength
ZoomWindow
ConvertPasteBoardPanel
EditButton
windowDidDeminiaturize:
ZoomLargeOut:
ResetSelection:
ChangeZoom:
windowDidBecomeMain:
ZoomChanged:
SelectAll:
ZoomIn:
ConvertPasteBoard:
ChangeSelection:
windowDidBecomeKey:
ZoomAllOut:
TurnOffMenu:
PasteInto:
CompactSound:
OkayConvertPasteBoard:
ZoomSmallOut:
ZoomAllIn:
ZoomSmallIn:
Delete:
ZoomToSelection:
ZoomLargeIn:
Copy:
CancelConvertPasteBoard:
TurnOnMenu:
ZoomOut:
ChangeView:
ModSound
Sound
sound_nib
SoundMeter
viewnib
SoundManager
NewSound
TheConsoleManager
CurrentSoundUsingDSP
CurrentSoundViewUsingDSP
TheEditController
Play:
willPlay:
selectionChanged:
didRecord:
CurrentSoundUsingDSP:
didPlay:
Stop:
SoundTable
InfoManager
Samples
Fragmented
Channels
Seconds
SoundType
ChangeVolumeModule
Module
/usr/include/machine/vm_types.h
PercentChangeField
ChangePanel
CancelChangeVolume:
ChangeVolume:
OkayChangeVolume:
ChangeFrequencyNoTimeModule
Double:
Halve:
PreferencesManager
PreferencesPanel
OscilliscopicDisplayButton
ContinuousUpdateViewButton
MinMaxDisplayButton
ContinuousUpdateSelectionButton
ContinuousZoomButton
StartPreferencesPanel:
PreferencesOkayed:
FirstResponder
firstnib
checkSpelling:
alignSelCenter:
unscript:
pasteFont:
runPageLayout:
superscript:
copyRuler:
copyFont:
selectAll:
pasteRuler:
toggleRuler:
showGuessPanel:
alignSelLeft:
paste:
performClose:
arrangeInFront:
subscript:
copy:
alignSelRight:
delete:
orderFrontColorPanel:
underline:
performMiniaturize:
TheModuleController
ModuleController
CompactPanel
TheInfoManager
TheSoundManager
AdjustButton
Okayed:
Cancelled:
CurrentSound:
CurrentWindow:
CurrentScrollView:
CurrentSoundView:
ReverseModule
ReverseIt:
UpdateSoundView
SoundView
drawSelf:
StringTable
FileController
QuitPanel
ThePreferencesManager
SaveAllButton
RevertButton
ClosePanel
NoDataSavePanel
SaveAsButton
CloseButton
SaveButton
Console
CurrentPanel
TheSoundTable
CancelSaveBeforeQuit:
windowWillClose:
SaveBeforeQuit:
TurnOnInformation:
appDidUpdate:
Quit:
Print:
windowDidResize:
SaveBeforeClose:
Revert:
DontSaveBeforeQuit:
DoPageLayout:
NoDataSaveOkay:
appDidBecomeActive:
Save:
Open:
SaveAs:
WindowDidUpdate:
CheckInformation:
SaveAll:
appDidUnhide:
Close:
CancelSaveBeforeClose:
DontSaveBeforeClose:
TurnOffInformation:
WindowDidResize:
ConsoleManager
StopButton
FortyStereoButton
SecondsField
PlayButton
RecordFormButton
TwentyStereoButton
Meter
RecordButton
TwentyMonoButton
FortyMonoButton
TimedRecordButton
PlayDown:
LeftSoundUp:
RightSoundDown:
LeftSoundDown:
RightSoundUp:
RecordDown:
StopDown:
[113922c]
typedstream
HashTable
Object
[16@]
NXImage
StopOff
NXBitmapImageRep
NXImageRep
iissss
[100c]UUUUZ
uUUU^
StopOn
UUUUZ
RecordOn
RecordOff
PlayOff
PlayOn
Four Sounds
[540c]
Key Map
[19220c]
@UUAP
@UUAP
Bugs & Problems
[4452c]
[1157c]
GNU License
[3107c]
About Modules
[3666c]
Preferences
[2951c]
Hot Keys
[2405c]
Resound
[2040c]
SoundIcon
[576c]
UUUUUUUUUUU
UUUUUUUUUUU
NibData
@@@@s
Storage
{*@@}
[297{*@@}]
File's Owner
CustomObject
Application
MainMenu
MenuTemplate
*@*@ccc
Matrix
Control
Responder
@:@iiii
MenuCell
ButtonCell
ActionCell
Helvetica
Info Panel...
Preferences...
Help...
Bugs and Problems
ff@@#::s
submenuAction:
Bitmap
menuArrow
Document
Save As...
Save All
Revert to Saved
Close
Delete
Paste
Convert Pasteboard...
Compact
Select All
To Selection
All In
All Out
Modules
Change Amplitude
Double Frequency
Halve Frequency
Reverse
Tools
Information
Selection
Record
Console
Windows
Arrange in Front
Miniaturize Window
Close Window
MenuItem4
LD{PD
WindowTemplate
iiii***@s@
Panel
Button
CustomView
SoundMeter
Record Format
TextField
TextFieldCell
Symbol
Volume
Button1
Button2
Button3
Field2
Field
[10@]
Samples
Seconds
Channels
Helvetica-Bold
Field1
Field4
Field3
Field8
Field9
Field10
Field5
FileController
SoundTable
EditController
InfoManager
ConsoleManager
ClosePanel
Save sound before closing?
Cancel
Don't Save
NXreturnSign
Matrix1
RecordPanel
Maximum Time
Timed Record
NXswitch
NXswitchH
Method
Microphone
NXradio
NXradioH
DSP Mono 44.1
DSP Stereo 44.1
DSP Mono 22
DSP Stereo 22
Radio
Display
Start
Length
ModuleControllerInstance
ModuleController
SoundManagerInstance
SoundManager
ZoomToPanel
[11@]
Slider
SliderCell
Slider2
[13@]
Version 1.0
=A Modular Sound Editor
and Programming Interface
By Sean Luke
Copyright 1992, Sean Luke
!Distributed Under the GNU License
Glen Henshaw
Don Yacktman Aric Johnson
@Dr. Barrett, BYU CS dept.
Robert Perkins
Nikkala Pack
Steve Jobs
Thanks To:
((Finally! Though Still Full O' Bugs...)
VersionNumber
Field6
Field7
QuitPanel
Save sounds before quitting?
LotsOfTimePanel
MThis operation may take
a long time and possibly
a lot of memory to perform.
ConvertPanel
Attempt to Convert Pasteboard
8-Bit Mu-Law
16-Bit 22 KHz
16-Bit 44.1 KHz
Format
Stereo
NoDataNoSavePanel
%Sounds with no data
cannot be saved.
HowToWriteAModule
ScrollView
ClipView
ciifffcfffs
[5302c]{\rtf0\ansi{\fonttbl\f1\fswiss Helvetica;}
\margl40
\margr40
{\colortbl\red0\green0\blue0;}
\pard\tx1140\tx2300\tx3440\tx4600\tx5760\tx6900\tx8060\tx9200\tx10360\tx11520\f1\b\i0\ul0\fs36 Where To Start
\b0\fs24 \
Modules are usually one-object beasts, perhaps with a panel or two attached. Before writing a module, you need to be reasonably acquainted with Objective-C, Interface Builder, and the SoundKit. From there, it shouldn't be too tough.\
\b\fs36 Tools
\b0\fs24 \
Take a gander at the following masterworks of spaghetti code, included with the application:\
\b ModuleController.h
\b0 \
The Module Controller was designed as the gateway between your module object(s) and the application code. It is the object to which your module object should send messages if it wants the program to do things. The Module Controller's methods encompass most everything the program can actually do.\
\
Module.h handles much of these little nitpicky things in its skeleton code. See below. \
Try not to send messages to other program objects other than the Module Controller sounds and soundviews--my code is so nasty for the time being, you might wind up doing something you wished you hadn't. In addition, I make no promises about future versions of this program other than an honest attempt to be backwards compatible with earlier versions of the Module Controller.\
\b Module.h and Module.m
\b0 \
Module is merely skeleton code that creates an ID for the Module Controller, and imports the application, the Module Controller, the AppKit and SoundKit, and various C routines. To make a module, your main object really should descend from Module.h.\
\b Imports.h\
\b0 Imports.h imports the kitchen sink. To use most objects and libraries, including all application objects, you only need to import Imports.h.\
\b\fs36 How To
\b0 \
\fs24 Much of the following stuff will be done by modifying the program's nib file with Interface Builder. The rest is typing in code that Interface Builder has parsed out.\
\b First,
\b0 create your main object as a subclass of Module.h. Note that Module.h has an ID for the Module Controller, and Module.m takes in Imports.h. The Module Controller ID is where you will send practically all of your messages, and Imports.h has most of the include and import files you will need. Write out the skeleton code from Interface Builder. Be sure to include the module's object in your project directory.\
\b Next,
\b0 create whatever nib files, interface stuff, etc., you need. Include these in the application's project. If you don't need any (like the Reverse module doesn't need any)\
\b Then,
\b0 write the code for the module. Libraries for interfacing with the application are found in ModuleController.h. To communicate with the program, send messages to TheModuleController.
\b \
Finally,
\b0 instantiate your object(s) in the application's nib file. Include a menu item which starts your module; this should go in the Modules menu. And be sure to connect the instance of ModuleController to your objects, so they know where they're sending messages to. Compile the program, and you're in business!\
\b One Note\
\b0 Be sure to inform the program that a sound has been edited, selected, zoomed, or whatnot
\i after
\i0 editing the sound. These procedures change the way the sound is displayed, and may also compact it, change its reduction, or other nasty things, so although you want to tell the program that the sound has changed, change the sound
\i first
\i0 , and then your module won't die.\
\b About Preferences\
\b0 A late addition to the program is the Preferences Manager. This system is open for you to add preferences, and some examples have been put in already. It's not well commented, so it's a jungle out there, but feel free to use it.\
\b\fs36 \
Program Structure
\b0 \
\fs24 There are quite a few separate objects in this program. See the accompianing file, "About Modules" for a diagram showing the relationships between these objects.\
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f0\b\i0\ul0\fs36\fc0 Known Bugs, Problems and Deficiences\
\fs24 As of June 10, 1992\
\b0 \
\f1 No 16-bit recording yet. The chief problem here is no support by NeXT for recording CD-quality sound into a soundview. It's a Catch-22 kind of thing (and a long story). If you'd like to help me on this one, drop me a line.\
\f1 Not all pasteboard conversion possiblties supported.\
\f1 Printing bombs. (So Printing is not implemented).\
\f1 Dynamic window allocation (strangely, right from the book), causes WindowServer errors.\
\f1 The View Panel doesn't update properly. This is basically because I'm not sure how to get scroll events to inform the EditController. Changing the window size works, though. And continuous update works.\
\f1 Not tuned for speed yet.\
\f1 No dynamic object loading for modules (like backspace), \
which would be nifty.\
\f1 The Change Amplitude module works logarithmically on\
\pard\tx1140\tx2300\tx3440\tx4600\tx5760\tx6900\tx8060\tx9200\tx10360\tx11520\f0\b\i0\ul0\fs36 About the Program\
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f1\fs24 June 15, 1992\
\b0 This program was conceived in the Summer of 1991, and written, little by little over a year or so. Student life is fraught with exams, y'know. A lot of it is spaghetti OOP, since I was learning the NeXTSTEP environment as I went. This really shows...oh, well.\
The idea of the program is to make it easier for researchers with a little programming ability to make their great sound editing ideas come to life without having to write out a full-blown application. This is accomplished by creating an environment where all a would-be programmer has to write is an add-in module object that communicates with the main program. Without modules, this program isn't too useful. With them, it shows a lot of potential, I think.\
The program is not even close to complete. In addition to printing, 16-bit recording, and a properly-working view update mechanism, the program could stand quite a few more sample modules and design changes. Send me e-mail if you have ideas.\
The program comes complete with source code, under the GNU license. Have fun!\
\pard\tx1140\tx2300\tx3440\tx4600\tx5760\tx6900\tx8060\tx9200\tx10360\tx11520\f0\b\fs36 About the Author\
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f1\b0\fs24 As of this writing, I'm an undergraduate at Brigham Young University, majoring in Computer Science and minoring in Music (Piano) and English Comp. Fun, huh? I'm looking for a few good graduate schools, particularly programs in computers and music, sound, or sound production. If you have any leads, I would appreciate hearing about them.\
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f1\b0\fs24 There are many tool panels. These panels give access to information about sounds, and allow scrollview zooming and sound recording and playback. All can be closed except the Console. To reopen any of them, choose the appropriate menu item in the Tools menu.\
\b Console\
\b0 The Console handles the playing and recording sounds, and allows volume settings in stereo (which cannot be done with the NeXT volume keys).\
\b Information\
\b0 The information panel automatically shows the sound type, number of samples, number of channels (mono:1 stereo:2), and number of seconds of a sound. It also tells if the sound is fragmented, which happens during cut/copy/paste editing and could considerably slow down other editing procedures. To de-fragment the sound, press the Compact button.\
\b Selection\
\b0 The Selection panel shows the start, end, and length of the current selection in number of samples and number of seconds.\
View\
\b0 The View panel shows the start, end, and length of the current visible sound in number of samples and number of seconds.\
\b Zoom
\b0 \
The Zoom panel allows zooming in or out. The buttons on the bottom work as follows:\
All In Zooms in to maximum detail\
<<< Zoom in significantly \
<<\
< Zoom in a bit\
> Zoom out a bit\
>>\
>>> Zoom out significantly\
All In Zooms out to minimum detail\
To Selection Zooms to fit the selection into the window\
The scroll bar allowsw precise zooming values. The small text field shows the current reduction factor, which varies between zero and one.\
\b Other Panels
\b0 \
\i Pasteboard Converstion \
\i0 Allows conversion of the pasteboard sound by number of channels and sample rate.\
\i Record Format
\i0 \
Is not currently implemented.\
\i Preferences\
\i0 Several application preferences are currently implemented:\
\i Update Selection in Real Time
\i0 will constantly update\
the Selection panel as the selection changes with\
the mouse. This is rather slow, but precise.\
\i Update Zoom in Real Time
\i0 will change the zoom as\
the Zoom scroll bar moves in real time. This is also\
slow, but precise.
\i0 \
\i Update View in Real Time
\i0 will do the same for the View\
panel; however, non-real-time view update doesn't\
work properly yet
you need to click on the scroll bar\
to update the view panel.\
In addition, Preferences allows either oscilliscopic or min/max\
display. The differences between these displays is only\
visible when the sound is zoomed completely out.\
\pard\tx1140\tx2300\tx3440\tx4600\tx5760\tx6900\tx8060\tx9200\tx10360\tx11520\f0\b\fs36 The Info Menu\
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f1\fs24 GNU License\
\b0 Read this.\
\b Bugs and Problems\
\b0 List of known bugs at publishing time. If you know any more, please send e-mail!\
\b About Modules\
\b0 A short introduction to the art of writing modules to add functionality to this program.\
\pard\tx1140\tx2300\tx3440\tx4600\tx5760\tx6900\tx8060\tx9200\tx10360\tx11520\f0\b\fs36 The Edit Menu\
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f1\fs24 To Selection\
\b0 Zooms to fill the window with the current selection. Not yet implemented.\
\b In\
\b0 Zooms in.\
\b Out\
\b0 Zooms out.\
\b All In\
\b0 Zooms to maximum detail.\
\b All Out\
\b0 Zooms to show the entire sound in the window.\
\pard\tx1140\tx2300\tx3440\tx4600\tx5760\tx6900\tx8060\tx9200\tx10360\tx11520\f0\b\fs36 The Modules Menu\
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f1\b0\fs24 Modules should have menu options in this menu. Modules that come with this program include:\
\i Change Amplitude
\i0 changes the volume of the sound.\
\i Double
\i0 tries (in vain) to double the frequency of the\
sound without changing the length.\
\i Halve
\i0 tries the same with halving the frequency.\
\i Reverse
\i0 reverses the entire sound. Channels are flipped.\
\pard\tx1140\tx2300\tx3440\tx4600\tx5760\tx6900\tx8060\tx9200\tx10360\tx11520\f0\b\fs36 The Tools Menu\
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f1\b0\fs24 Calls up tool panels discussed previously\
\pard\tx1140\tx2300\tx3440\tx4600\tx5760\tx6900\tx8060\tx9200\tx10360\tx11520\f0\b\fs36 Hot Keys\
\pard\tx520\tx1060\tx1600\tx2120\tx2660\tx3200\tx3720\tx4260\tx4800\tx5320\f1\b0\fs24 As you might have noticed, the Console
\i insists
\i0 , or demands to remain the top window. This is so it can remain visible at all times, and also so it can receive keyboard messages from the number pad. Press the Hot Keys button above to see which number pad keys correspond to buttons on the Console.\
\pard\tx1140\tx2280\tx3420\tx4560\tx5700\tx6840\tx7980\f0\b\i0\ul0\fs36 Gnu General Public License
\b0\fs24 \
\b Version 1, February 1989\
Copyright (C) 1989 Free Software Foundation, Inc. \
675 Mass Ave, Cambridge, MA 02139, USA
\b0 \
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\
\b\fs36 Preamble
\b0\fs24 \
The license agreements of most software companies try to keep users at the mercy of those companies. By contrast, our General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. The General Public License applies to the Free Software Foundation's software and to any other program whose authors commit to using it. You can use it for your programs, too.\
When we speak of free software, we are referring to freedom, not price. Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.\
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.\
For example, if you distribute copies of a such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights.\
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.\
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.\
The precise terms and conditions for copying, distribution and modification follow.\
\b\fs36 Gnu General Public License
\fs24 \
Terms and Conditions for Copying, Distribution and Modification\
\b0 \
0. This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications. Each licensee is addressed as "you".\
1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program. You may charge a fee for the physical act of transferring a copy.\
2. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following:\
a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and\
b) cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option).\
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License.\
d) You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.\
Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms.\
3. You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following:\
a) accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or,\
b) accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or,\
c) accompany it with the information you received as to where the corresponding source code may be obtained. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.)\
Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system.\
4. You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License. However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance.\
5. By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions.\
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein.\
7. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\
Each version is given a distinguishing version number. If the Program specifies a version number of the license which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation.\
8. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.\
\b NO WARRANTY
\b0 \
9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\
10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\